home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / gnustuff / tos / gemlib / gmlibs23.zoo / vdiinq.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-27  |  7.1 KB  |  345 lines

  1. /*
  2.  *    Vdi inquiry funcs library interface
  3.  *
  4.  *        vq_extnd    extended inquire
  5.  *        vq_color    inquire color rep.
  6.  *        vql_attribute    inquire polyline attribute
  7.  *        vqm_attributes    inquire polymarker atribs
  8.  *        vqf_attributes    inquire fill area atribs
  9.  *        vqt_attributes    inquire text atribs
  10.  *        vqt_extent    inquire text extent
  11.  *        vqt_width    inquire char cell width
  12.  *        vqt_name    inquire face name
  13.  *        vq_cellarray    inquire cell array
  14.  *        vqin_mode    inquire input mode
  15.  *        vqt_fontinfo    get font info
  16.  *
  17.  *            ++jrb    bammi@cadence.com
  18.  *            modified: mj -- ntomczak@vm.ucs.ualberta.ca
  19.  *
  20.  */
  21. /*
  22.  *    Note that at this moment (Sept. 91) Atari modified vqt_name()
  23.  *    interface and a string returned from it has a length 33 with
  24.  *    the 33rd byte serving as a flag.  This should not matter if
  25.  *    your program was allocating this extra byte anyway for a
  26.  *    terminating null, but it may kill you if this space was tight!
  27.  *    THIS IS NOT OFFICIAL yet and it may change!!!
  28.  */
  29. #include "common.h"
  30.  
  31. #ifdef __DEF_ALL__
  32.  
  33. #define L_vq_extnd
  34. #define L_vq_color
  35. #define L_vql_attr
  36. #define L_vqm_attr
  37. #define L_vqf_attr
  38. #define L_vqt_attr
  39. #define L_vqt_exte
  40. #define L_vqt_widt
  41. #define L_vqt_name
  42. #define L_vq_cella
  43. #define L_vqin_mod
  44. #define L_vqt_font
  45.  
  46. #endif /* __DEF_ALL__ */
  47.  
  48.  
  49. #ifdef L_vq_extnd
  50.  
  51. /* vq_extnd    extended inquire
  52.  * returns void (results in args)
  53.  */
  54. void vq_extnd(int handle, int flag, int work_out[])
  55. {
  56. #ifndef __MSHORT__
  57.     short *iptr;
  58.     int   *wptr, *end;
  59.     
  60.     _intin[0] = flag;
  61.     
  62.     __vdi__(VDI_CONTRL_ENCODE(102, 0, 1, 0), handle);
  63.     
  64.     wptr = work_out;
  65.     end = wptr + 45;
  66.     iptr = _intout;
  67.     do {
  68.     *wptr++ = *iptr++;
  69.     } while (wptr < end);
  70.     end += 12;
  71.     iptr = _ptsout;
  72.     do {
  73.     *wptr++ = *iptr++;
  74.     } while (wptr < end);
  75. #else
  76.     _intin[0] = flag;
  77.     
  78.     _vdiparams[3] = &work_out[0];
  79.     _vdiparams[4] = &work_out[45];
  80.     __vdi__(VDI_CONTRL_ENCODE(102, 0, 1, 0), handle);
  81.     _vdiparams[3] = &_intout[0];
  82.     _vdiparams[4] = &_ptsout[0];
  83.     
  84. #endif    /* __MSHORT__ */
  85. }
  86. #endif /* L_vq_extnd */
  87.  
  88. #ifdef L_vq_color
  89.  
  90. /* vq_color    inquire color rep.
  91.  * returns index or -1 if index out of range
  92.  */
  93. int vq_color(int handle, int index, int flag, int rgb[])
  94. {
  95.     short *wptr;
  96.     
  97.     _intin[0] = index;
  98.     _intin[1] = flag;
  99.     
  100.     __vdi__(VDI_CONTRL_ENCODE(26, 0, 2, 0), handle);
  101.     
  102.     wptr = &_intout[1];
  103.     *rgb++ = *wptr++;
  104.     *rgb++ = *wptr++;
  105.     *rgb   = *wptr;
  106.  
  107.     return (int)_intout[0];
  108. }
  109. #endif /* L_vq_color */
  110.  
  111.  
  112. #ifdef L_vql_attr
  113.  
  114. /* vql_attribute    inquire polyline attribute
  115.  * returns void (results in arg)
  116.  */
  117. void vql_attribute(int handle, int atrib[])
  118. {
  119.     short *wptr;
  120.     
  121.     __vdi__(VDI_CONTRL_ENCODE(35, 0, 0, 0), handle);
  122.     
  123.     wptr = &_intout[0];
  124.     *atrib++ = *wptr++;
  125.     *atrib++ = *wptr++;
  126.     *atrib++ = *wptr;
  127.     *atrib = _ptsout[0];
  128. }
  129. #endif /* L_vql_attr */
  130.  
  131. #ifdef L_vqm_attr
  132.  
  133. /* vqm_attributes    inquire polymarker atribs
  134.  * returns void (result in arg)
  135.  */
  136. void vqm_attributes(int handle, int atrib[])
  137. {
  138.     short *wptr;
  139.     
  140.     __vdi__(VDI_CONTRL_ENCODE(36, 0, 0, 0), handle);
  141.     
  142.     wptr = &_intout[0];
  143.     *atrib++ = *wptr++;
  144.     *atrib++ = *wptr++;
  145.     *atrib++ = *wptr;
  146.     *atrib = _ptsout[1];
  147. }
  148. #endif /* L_vqm_attr */
  149.  
  150. #ifdef L_vqf_attr
  151.  
  152. /* vqf_attributes    inquire fill area atribs
  153.  * returns void (result in arg)
  154.  */
  155. void vqf_attributes(int handle, int atrib[])
  156. {
  157.     short *wptr;
  158.     
  159.     __vdi__(VDI_CONTRL_ENCODE(37, 0, 0, 0), handle);
  160.     
  161.     wptr = &_intout[0];
  162.     *atrib++ = *wptr++;
  163.     *atrib++ = *wptr++;
  164.     *atrib++ = *wptr++;
  165.     *atrib++ = *wptr;
  166. }
  167. #endif /* L_vqf_attr */
  168.  
  169. #ifdef L_vqt_attr
  170.  
  171. /* vqt_attributes    inquire text atribs
  172.  * reurns void (results in arg)
  173.  */
  174. void vqt_attributes(int handle, int atrib[])
  175. {
  176. #ifndef __MSHORT__
  177.     short *wptr;
  178.     int   *end;
  179.     
  180.     __vdi__(VDI_CONTRL_ENCODE(38, 0, 0, 0), handle);
  181.     
  182.     wptr = &_intout[0];
  183.     end  = &atrib[6];
  184.     do {
  185.     *atrib++ = *wptr++;
  186.     } while (atrib < end);
  187.     wptr = &_ptsout[0];
  188.     end += 4;
  189.     do {
  190.     *atrib++ = *wptr++;
  191.     } while (atrib < end);
  192. #else
  193.     _vdiparams[3] = &atrib[0];
  194.     _vdiparams[4] = &atrib[6];
  195.     __vdi__(VDI_CONTRL_ENCODE(38, 0, 0, 0), handle);
  196.     _vdiparams[3] = &_intout[0];
  197.     _vdiparams[4] = &_ptsout[0];
  198. #endif /* __MSHORT__ */
  199. }
  200. #endif /* L_vqt_attr */
  201.  
  202. #ifdef L_vqt_exte
  203.  
  204. /* vqt_extent    inquire text extent
  205.  * returns void (result in arg)
  206.  */
  207. void vqt_extent(int handle, char *str, int extent[])
  208. {
  209.     unsigned char ch;
  210.     short *ptr;
  211.     int   *ept, *end;
  212.     
  213.     ptr = _intin;
  214.     while ( ch = *str++)
  215.     *ptr++ = ch;
  216.     
  217.     __vdi__(VDI_CONTRL_ENCODE(116, 0, (int)(ptr - _intin), 0), handle);
  218.     
  219.     ptr = _ptsout;
  220.     ept = extent;
  221.     end = ept + 8;
  222.     do {
  223.     *ept++ = *ptr++;
  224.     } while (ept < end);
  225. }
  226. #endif /* L_vqt_exte */
  227.  
  228. #ifdef L_vqt_widt
  229.  
  230. /* vqt_width    inquire char cell width
  231.  * returns status (and results in args)
  232.  */
  233. int vqt_width(int handle, int chr,
  234.           int *cw, int *ldelta, int *rdelta)
  235. {
  236.     _intin[0] = chr;
  237.     
  238.     __vdi__(VDI_CONTRL_ENCODE(117, 0, 1, 0), handle);
  239.     
  240.     *cw = _ptsout[0];
  241.     *ldelta = _ptsout[2];
  242.     *rdelta = _ptsout[4];
  243.     
  244.     return (int)_intout[0];
  245. }
  246. #endif /* L_vqt_widt */
  247.  
  248. #ifdef L_vqt_name
  249.  
  250. /* vqt_name    inquire face name
  251.  * returns index (name in arg)
  252.  */
  253. int vqt_name(int handle, int element, char *name)
  254. {
  255.     short *wptr, *end;
  256.     
  257.     _intin[0] = element;
  258.     
  259.     __vdi__(VDI_CONTRL_ENCODE(130, 0, 1, 0), handle);
  260.     
  261.     wptr = &_intout[1];
  262.     end  = wptr + 33;        /* 32 string elements + flag */
  263.     do {
  264.     *name++ = *wptr++;
  265.     } while (wptr < end);
  266.     return (int)_intout[0];
  267. }
  268. #endif /* L_vqt_name */
  269.  
  270. #ifdef L_vq_cella
  271.  
  272. /* vq_cellarray        inquire cell array
  273.  * returns void (results in args)
  274.  */
  275. void vq_cellarray(int handle, int pxyarray[], int row_len, int nrows,
  276.           int *el_used, int *rows_used, int *status, int color[])
  277. {
  278.     short *end, *wptr = _ptsin;
  279.     
  280.     end = wptr + 4;
  281.     do {
  282.     *wptr++ = *pxyarray++;
  283.     } while (wptr < end);
  284.     _contrl[7] = row_len;
  285.     _contrl[8] = nrows;
  286.     
  287.     __vdi__(VDI_CONTRL_ENCODE(27, 2, 0, 0), handle);
  288.     
  289.     wptr = _intout;
  290.     end = wptr + (short) nrows * (short) row_len;
  291.     while (wptr < end)
  292.     *color++ = *wptr++;
  293.     *el_used = _contrl[9];
  294.     *rows_used = _contrl[10];
  295.     *status    = _contrl[11];
  296. }
  297. #endif /* L_vq_cella */
  298.  
  299. #ifdef L_vqin_mod
  300.  
  301. /* vqin_mode    inquire input mode
  302.  * returns void (desult in arg)
  303.  */
  304. void vqin_mode(int handle, int dev, int *mode)
  305. {
  306.     _intin[0] = dev;
  307.     
  308.     __vdi__(VDI_CONTRL_ENCODE(115, 0, 1, 0), handle);
  309.     
  310.     *mode = _intout[0];
  311. }
  312. #endif /* L_vqin_mod */
  313.  
  314. /* vqt_fontinfo (alias vqt_font_info)    get font info
  315.  * returns void (results in args)
  316.  */
  317.  
  318. #ifdef L_vqt_font
  319.  
  320. __asm__(".stabs \"_vqt_font_info\",5,0,0,_vqt_fontinfo");
  321.                     /* dept of clean tricks */
  322. void vqt_fontinfo(int handle, int *minade, int *maxade, int distances[],
  323.           int *maxwidth, int effects[])
  324. {
  325.     short *wptr, *end;
  326.     
  327.     __vdi__(VDI_CONTRL_ENCODE(131, 0, 0, 0), handle);
  328.     
  329.     *minade = _intout[0];
  330.     *maxade = _intout[1];
  331.     
  332.     wptr = _ptsout;
  333.     *maxwidth = *wptr++;
  334.     end = wptr + 6;
  335.     do {
  336.     *distances++ = *wptr++;
  337.     *effects++   = *wptr++;
  338.     } while (wptr < end);
  339.     *distances++ = *wptr;
  340.     *distances   = wptr[2];
  341. }
  342. #endif /* L_vqt_font */
  343.  
  344. /* -eof- */
  345.